ML }  X c0C)HCCH Mhhݩh `eCDiCD`  RyHP   * 1H0芢@) Y0.Ș` i #(PMR\ \b Pgi 0  % @ / ՠ`d   0DDԝLXZN@  )?HI Y0`HIJH) * J j * hJJJ )HJ h i     } YS S0 i`΢ϣ߳H J3xj2h} 1 |9 ӭ45(420 * (0241өX.`  R *i)Lvw  ~*P}E 5 LN(G E  r s k rsrL ( E LO(0d( L iE0O +)$IC  H S8 }q p h   j 8no CDLQ CFl M  LO Ri)Llk2'")*F }$F$F$F$F$ 5 )ШF/Șl]kpqС,LQ/A! Ti)Zlk@ ܬ/i)(")")k }$F$F$F 5$/L /lF@jj(LNkle$$%8(k()` R 8 ELO Ri)^>jf | NrC s } ) vw5g   enfo Glvw LQ@iLm>j FL ~Jjjjii p qEh }jlrs`LQ:$ȱ$@+[_#{ 8  Խut! ai 8   E I   ] C } H h    ˰ 8  N   Lm E  ,  [ `LQ ,/ 8 ~/  Ơ? ѩ}/  [ /Lj0?MoLn FjMqLp NklLOLQnLoMlNLO R"(+}ըHH`Q R!!  % !   / .   FȑF! /GF \H"+0+* }! F tLQnm: J~nTF1F  *n+)5! n (, n)1JJJn(n*o} I ,0  ci a oF? @ , 8,0 ʩ0H Eh   i}  D ]DmmFLQvtu`*&!*@h ] 0 ^0` c 0l$$%}()()%*&J%H,@hH hH@,h $% 8i8$(%)0hhH ]h`() c 0H c 0 h}`hhh&JJ ](ll  LQ0  /qnoHH 9 9 H H  I9  9 } Nd EH  Q8 o n  FnoL HII/ Ih8`h`Lnon`no`u F }E VEhLO/luF l0BF/lɜɛ׽hE N  b VFL FREE SECTORS C} H) *Fh ):FȽ F FC IH' 0 d  i:Fȩ/F.l`CD/08HDIC}IHȰ/F`ȱ$>.+.i ȱ$:刄H !A \ Hȱ$*?ȝ 2. ? [_{ ,0}-:) 0$:>WI  IТ,LQH  0hLd ~ t u`C ?( 0(C.` E } R =! .ti S0N EE D XC )0')AY  )ע ? 0E088FG \o}n  (HhLcL3 iJ i Lqp 0=rspnqopqlk`jZj0  j FL`H}FhȑFȽlFi0 h FFLFpvqwgneofLF pq7  G0i 0 FJJh1FqȱFpȱFk`B!}08`hEE D 8. =D}tui( TʩL`b!)    cȌaȌd b`aab}H8 hdaHcd8 cH hHH  \h hc` =Hh I8ih( t  ( t(!` L\}CJfCJfCJfCDfC` a  HII  INdh  `h  `n)8jHniPoijIjFIjFIjh` a } I 38  8H0 I  ' H LQ8j Y  8j NdY  &I &I &IHeH.p!}Iiq  `!.莿 2Jjj }.m Ȉ!m FG` ɩLQ z "} e Hi04 \ Ȍ  8 i h !`I0 `C Y8.`DOS SYS#} I  ` ~ݩ.C/`ba.m۩mѤC9 `C L] H  ,- '0 l $}, BLVDE`D1:AUTORUN.SYS8hhJ ȱHȱIȱBȱDȱEeeHHLV)  %}1*  ,,p-  0 I &  '0   Lw)l, 0  I&LD1:MEM.SAV&}E:D1:DUP.SYS:f oc2*Gs_xûIg3f (ϮDxL/'} D  C D     )16CS S)  C)D1 p p (}0 C9DI pCDL~CiCDiD` DD˙` d J)L !)}D L(( LL()  L| L( S LH 0p n  *} CY?  q  L L  ` )+} `A! d߰")-݆ "  $G@LLL&0") $G%,}H0 3S8`G ȱG ȱG   Gȭ Gȭ GG}GHiH8(()) G$H% `(0-})8` d)L ݆ & LGȘ ݆LL d  ! LL d)N>Q  HH).}  hyhyB q L> Lm JJ  Ln*` dB%'/}8  H H` 1 { LL   !L     Hh SY?  q  1L0}  !? S   q 1 L   Ll  Lg E`L   !L)  q 1L1}) `L0AM݊L݉ ML  N݆LLLNLMLHG!@2}1F GȱGLLEEȩÑEȑEEȑE Ed E7EȩE  q3} L !,0,0SGɛ L 1 !L EHEh W G gLLSROTCES EERF 4} G) *Gȩ GȽG GȌd q q G`  8   0G  `D5}CEDC0X:Ȣ Y ȱC* ? 0.. , 0%n ?A[ 0 : L`L  `, 0`Y6}`piH n0)բY? 08`0 7}  0$L GGȽG L `8L`L8}8`  05G)݁,G)ȱGȱGHh0})Hh` B! 8`8iiiLE`9}E8FEh( l0`ɃLL L8^~jj8jHi hEEEiEȱEiE` dTE:} H8EEȱEEȩEh J E8   . m  i`LI!)E1FR;}1LJ舩9GIH`LJJ`HGHh l`<} S gL   8 rii `дCDCG W  =}C  Lq` X٨`DOS SYS IIIIIIIIIIIIIIIC`0 ߩ0}}>} HE |||||DOS DOSDOS SYS }?}}@}CDOS SYSA} 0`BDELV !B B}`LVUQ   ]   TU J ]L!T  #      TU C} L ? .  t`GBJ V~DEHI B V0dVD}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEhE}DEL8HI   0 HI,0 0  9 .G VLOF},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHIG} V0 0`B;DELV䌚 !B y`@ʆ v s? F0Ξ05: [ BDEHIH} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO I}STILL RUN DOS B;DE J V (` 9 V⪍ ઍ  -J}LLu DEHILV 9 .l 9 .l  `` s$B VBHK}I|DE V BLV nB,DE J V* \*` B V BLVDEHI BLVLL}1 3u H232435; 1 ;  hh@2 e1i1LHҍ 00) 08 109hh@ Ҡ2eM}1i1232435ޥ<<8}0100 ;0110 ; File: D:PLANET3.M650120 ;0130 ; ----------------------0140 ; Check satellite status0150 ; -----------------O}-----0160 ;0170 CHKSAT LDA DEADTM ;satellite ok?0180 BEQ LIVE ;No. skip next0190 CHKSX RTS ;return0200 LIVEP} LDA LIVES ;lives left?0210 BMI CHKSX ;No. exit0220 LDA #1 ;get one0230 STA SATLIV ;set alive flag02Q}40 LDA M0PL ;did satellite0250 ORA M0PL+1 ;hit any bombs?0260 BEQ CHKSX ;No. exit0270 LDA #0 ;gR}et zero0280 STA SATLIV ;kill satellite0290 STA SCNT ;init orbit0300 LDX LIVES ;one less life0310 STS}A SCOLIN+14,X ;erase life0320 DEC LIVES ;dec lives count0330 BPL MORSAT ;any left? Yes.0340 LDA #255 ;loT}t of bombs0350 STA BOMBS ;into bomb count0360 STA GAMCTL ;end game0370 JSR SNDOFF ;no sound 1 2 30380 MORU}SAT LDA SATX ;sat X-coord0390 STA NEWX ;explo X-coord0400 LDA SATY ;sat Y-coord0410 STA NEWY ;explo YV}-coord0420 JSR NEWEXP ;set off explo0430 LDA #80 ;init sat X0440 STA SATX ;sat X-coord0450 LDA #2W}1 ;init sat Y0460 STA SATY ;sat Y-coord0470 LDX #0 ;don't show the0480 CLRSAT LDA MISL,X ;satellite piX}c0490 AND #$F0 ;mask off sat0500 STA MISL,X ;restore data0510 DEX ;dec index0520 BNE CLRSAT Y};done? No.0530 LDA #$FF ;4.25 seconds0540 STA DEADTM ;till next life!0550 RTS ;return0560 ;0570 Z}; ------------------0580 ; Check console keys0590 ; ------------------0600 ;0610 ENDGAM JSR SNDOFF ;no sound 1230620 END[}GLP LDA STRIG0 ;stick trigger0630 AND PTRIG0 ;mask w/paddle 00640 AND PTRIG1 ;mask w/paddle 10650 BEQ ENDGL1\} ;any pushed? No.0660 LDA CONSOL ;chk console0670 CMP #7 ;any pushed?0680 BEQ ENDGLP ;No. loop here06]}90 ENDGL1 JMP PLANET ;restart game0700 ;0710 ; -------------------------0720 ; Turn off sound regs 1 2 30730 ; ----------^}---------------0740 ;0750 SNDOFF LDA #0 ;zero volume0760 STA AUDC1 ;to sound #10770 STA AUDC1+2 ;sound #2078_}0 STA AUDC1+4 ;sound #30790 RTS ;return0800 ;0810 ; -----------------------0820 ; Check for hits on bombs`}0830 ; -----------------------0840 ;0850 CHKHIT LDX #3 ;4 bombs 0..30860 LDA SAUCER ;saucer enabled?0870 BEQ a}CHLOOP ;No. skip next0880 LDA #0 ;get zero0890 STA BOMCOL ;collision count0900 LDA GAMCTL ;game over?b}0910 BMI NOSCOR ;Yes. skip next0920 LDA BOMBX+3 ;saucer X-coord0930 CMP #39 ;off screen lf?0940 BCC Nc}OSCOR ;Yes. kill it0950 CMP #211 ;off screen rt?0960 BCS NOSCOR ;Yes. kill it0970 LDA BOMBY+3 ;saucer Y-cd}oord0980 CMP #19 ;off screen up?0990 BCC NOSCOR ;Yes. kill it1000 CMP #231 ;off screen dn?1010 BCe}S NOSCOR ;Yes. kill it1020 CHLOOP LDA #0 ;get zero1030 STA BOMCOL ;collision count1040 LDA P0PF,X ;playf collf}ision1050 AND #$05 ;w/shot+planet1060 BEQ NOBHIT ;hit either? No.1070 INC BOMCOL ;Yes. inc count1080 g} AND #$04 ;hit shot?1090 BEQ NOSCOR ;No. skip next1100 LDA GAMCTL ;game over?1110 BMI NOSCOR ;Yes. skip h}next1120 LDA #2 ;1/30th second1130 STA BOMBWT ;bomb wait time1140 CPX #3 ;saucer player?1150 Bi}NE ADDBS ;No. skip this1160 LDA SAUCER ;saucer on?1170 BEQ ADDBS ;No. this this1180 LDA SAUVAL ;saucer vj}alue1190 STA SCOADD+1 ;point value1200 JMP ADDIT ;add to score1210 ;1220 ; -----------------------1230 ; Add bk}omb value to score1240 ; -----------------------1250 ;1260 ADDBS LDA BOMVL ;bomb value low1270 STA SCOADD+2 ;score inl}c low1280 LDA BOMVH ;bomb value high1290 STA SCOADD+1 ;score inc high1300 ADDIT STX XHOLD ;save X register1310 m} JSR ADDSCO ;add to score1320 LDX XHOLD ;restore X1330 NOSCOR LDA #0 ;get zero1340 STA BOMACT,X ;kill bombn}1350 LDY BOMBLR,X ;L/R flag1360 LDA BOMBX,X ;bomb X-coord1370 SEC ;set carry1380 SBC BXOF,Y ;bomo}b X offset1390 STA NEWX ;plotter X-coord1400 LDA BOMBY,X ;bomb Y-coord1410 SEC ;set carry1420 p}SBC #40 ;bomb Y offset1430 LSR A ;2 line res.1440 STA NEWY ;plotter Y-coord1450 LDA SAUCER ;saucq}er?1460 BEQ EXPBOM ;No. explode it1470 CPX #3 ;bomb player?1480 BNE EXPBOM ;Yes. explode it1490 LDr}A #0 ;get zero1500 STA SAUCER ;kill saucer1510 JSR CLRPLR ;clear player1520 LDA GAMCTL ;game over?153s}0 BMI NOBHIT ;Yes. skip next1540 EXPBOM JSR CLRPLR ;clear player1550 LDA BOMCOL ;collisions?1560 BEQ NOBHIT t} ;No. skip this1570 JSR NEWEXP ;init explosion1580 NOBHIT DEX ;dec index1590 BPL CHLOOP ;done? No.1600 u} STA HITCLR ;reset collision1610 RTS ;return1620 ;1630 ; -------------------------1640 ; Advance bombs/projev}ctiles1650 ; -------------------------1660 ;1670 ADVIT LDA BXHOLD,X ;bomb X-sum1680 CLC ;clear carry1690 w} ADC BXINC,X ;add X-increment1700 STA BXHOLD,X ;replace X-sum1710 LDA #0 ;get zero1720 ROL A ;carryx} = 11730 STA DELTAX ;X-delta1740 LDA BYHOLD,X ;bomb Y-sum1750 ADC BYINC,X ;add Y-increment1760 STA BYHOLy}D,X ;replace Y-sum1770 LDA #0 ;get zero1780 ROL A ;carry = 11790 STA DELTAY ;Y-delta1800 LDA z}BOMBLR,X ;bomb L/R flag1810 BEQ ADVLFT ;go left? Yes.1820 LDA BOMBX,X ;bomb X-coord1830 ADC DELTAX ;add X-de{}lta1840 JMP ADVY ;skip next1850 ADVLFT LDA BOMBX,X ;bomb X-coord1860 SEC ;set carry1870 SBC DELTAX|} ;sub X-delta1880 ADVY STA BOMBX,X ;save X-coord1890 LDA BOMBUD,X ;bomb U/D flag1900 BEQ ADVDN ;go down? Yes.1}}910 LDA BOMBY,X ;bomb Y-coord1920 SEC ;set carry1930 SBC DELTAY ;sub Y-delta1940 JMP ADVEND ;ski~}p next1950 ADVDN LDA BOMBY,X ;bomb Y-coord1960 CLC ;clear carry1970 ADC DELTAY ;add Y-delta1980 ADVEND S}TA BOMBY,X ;save Y-coord1990 RTS ;return2000 ;2010 ; --------------------------2020 ; Clear out player indica}ted2030 ; by the X register!2040 ; --------------------------2050 ;2060 CLRPLR LDA #0 ;move player...2070 STA HPOS}P0,X ;off screen,2080 TAY ;init index2090 TXA ;get X2100 ORA # >PLR0 ;mask w/address2110 }STA HI ;plr addr high2120 TYA ;Acc = 02130 STA LO ;plr addr low2140 CLPLP STA (LO),Y ;zero playe}r2150 DEY ;dec index2160 BNE CLPLP ;done? No.2170 RTS ;return2180 ;2190 ; ----------------}-------2200 ; Calculate target vector2210 ; -----------------------2220 ;2230 VECTOR LDA #0 ;get zero2240 STA LR } ;going left2250 LDA FROMX ;from X-coord2260 CMP TOX ;w/to X-coord2270 BCC RIGHT ;to right? Yes.22}80 SBC TOX ;get X-diff2290 JMP VECY ;skip next2300 RIGHT INC LR ;going right2310 LDA TOX ;to X-c}oord2320 SEC ;set carry2330 SBC FROMX ;get X-diff2340 VECY STA VXINC ;save difference2350 LDA #1 } ;get one2360 STA UD ;going up flag2370 LDA FROMY ;from Y-coord2380 CMP TOY ;w/to Y-coord2390 } BCC DOWN ;down? Yes.2400 SBC TOY ;get Y-diff2410 JMP VECSET ;skip next2420 DOWN DEC UD ;going down }flag2430 LDA TOY ;to Y-coord2440 SEC ;set carry2450 SBC FROMY ;get Y-diff2460 VECSET STA VYINC };are both2470 ORA VXINC ;distances 0?2480 BNE VECLP ;No. skip next2490 LDA #$80 ;set x increment2500 } STA VXINC ;to default.2510 VECLP LDA VXINC ;X vector incre2520 BMI VECEND ;>127? Yes.2530 LDA VYINC ;Y vec}tor incre2540 BMI VECEND ;>127? Yes.2550 ASL VXINC ;times 2 until2560 ASL VYINC ;one is >1272570 JMP} VECLP ;continue2580 VECEND RTS ;return2590 ;2600 ; ------------2610 ; Add to score2620 ; ------------2630 ;264}0 ADDSCO LDY #0 ;init index2650 SED ;decimal mode2660 CLC ;clear carry2670 LDX #2 ;do 3} bytes2680 ASCLP LDA SCORE,X ;get score2690 ADC SCOADD,X ;add bomb value2700 STA SCORE,X ;save score2710 STY }SCOADD,X ;zero value2720 DEX ;next byte2730 BPL ASCLP ;done? No.2740 CLD ;clear decimal2750} ;2760 ; ----------2770 ; Show score2780 ; ----------2790 ;2800 SHOSCO LDA #$10 ;put color 02810 STA SHCOLR ;in ho}ld area2820 LDX #1 ;2nd line char2830 LDY #0 ;digits 1,22840 SSCOLP LDA SCORE,Y ;get digits2850 JSR} SHOBCD ;show 'em2860 INX ;advance score2870 INX ;line pointer2880 INY ;next 2 digits}2890 CPY #3 ;done 6?2900 BNE SSCOLP ;no!2910 RTS ;all done!2920 ;2930 ; -----------------2940} ; Show level number2950 ; -----------------2960 ;2970 SHOLVL LDY #$50 ;use color 22980 STY SHCOLR ;save it2990 } LDA LEVEL ;get level #3000 LDX #11 ;12th char on line3010 ;3020 ; -----------------3030 ; Show 2 BCD digits30}40 ; -----------------3050 ;3060 SHOBCD STA SHOBYT ;save digits3070 AND #$0F ;get lower digit3080 ORA SHCOLR };add color3090 STA SCOLIN+1,X ;show it3100 LDA SHOBYT ;get both again3110 LSR A ;mask...3120 LSR A} ;off...3130 LSR A ;upper...3140 LSR A ;digit3150 ORA SHCOLR ;add color3160 STA SCOLIN},X ;show it!3170 RTS ;and exit.3180 ;3190 ; -------------------3200 ; KOALA PAD interface3210 ; ------------}-------3220 ;3230 ; The following filtering3240 ; algorithm is used:3250 ;3260 ; Given 5 points S1,S2,S3,S4,S53270 ;32}80 ; R1=S1+S2+S2+S33290 ; R2=S2+S3+S3+S43300 ; R3=S3+S4+S4+S53310 ;3320 ; AVG=(R1+R2+R2+R3)/163330 ;3340 ; This reduces} to:3350 ;3360 ; AVG=(S1+S2*4+S3*6+S4*4+S5)/163370 ;3380 ; ---------------------------3390 ; Rotate points through queue}3400 ; ---------------------------3410 ;3420 KOALA LDX #4 ;do 5 bytes3430 ROT LDA XQ-1,X ;move X queue3440 STA X}Q,X ;up one byte3450 LDA YQ-1,X ;move Y queue3460 STA YQ,X ;up one byte3470 DEX ;dec count3480} BNE ROT ;done? No.3490 ;3500 ; --------------------3510 ; Clear out the cursor3520 ; --------------------3530 ;}3540 LDY CURY ;get Y coord3550 LDX #5 ;do 6 bytes3560 CCURS LDA MISL,Y ;get missiles3570 AND #$F0 };mask off low3580 STA MISL,Y ;put back3590 DEX ;dec count3600 BPL CCURS ;done? No.3610 ;3620 ; --}-------------------------3630 ; Insert new point into queue3640 ; ---------------------------3650 ;3660 LDA #1 ;}pen up flag3670 STA PENFLG ;set pen up3680 LDA PADDL0 ;X input3690 STA XQ ;put in queue3700 CMP #5} ;screen boundary3710 BCC KOALAX ;on screen? No.3720 LDA PADDL1 ;Y input3730 STA YQ ;put in queue}3740 CMP #5 ;screen boundary3750 BCC KOALAX ;on screen? No.3760 ;3770 ; ---------------------3780 ; Filter }the X-Y queues3790 ; ---------------------3800 ;3810 LDA # XQ ;queue addr high3840 STA PTR+1 ;pointer high3850 JSR FILTER ;filter X data3860 BCS KOALAX} ;good data? No.3870 ADC #16 ;X offset3880 CMP #48 ;far left?3890 BCS FLF ;No. skip3900 LDA }#48 ;screen left3910 FLF CMP #208 ;far right?3920 BCC FRT ;No. skip3930 LDA #207 ;screen right3940 }FRT STA CURX ;put X coord3950 LDA # YQ ;que}ue addr high3980 STA PTR+1 ;pointer high3990 JSR FILTER ;filter Y data4000 BCS KOALAX ;good data? No.4010} ADC #16 ;Y offset4020 CMP #32 ;above top?4030 BCS FUP ;No. skip4040 LDA #32 ;screen top4}050 FUP CMP #224 ;below bottom?4060 BCC FDN ;No. skip4070 LDA #223 ;screen bottom4080 FDN STA CURY ;p}ut Y coord4090 ;4100 ; ----------------------4110 ; Paddle trigger handler4120 ; ----------------------4130 ;4140 L}DA PTRIG0 ;paddle trig 04150 EOR PTRIG1 ;EOR w/PTRIG14160 EOR #1 ;inverse data4170 STA STRIG0 ;put in }STRIG04180 LDA #0 ;pen down flag4190 STA PENFLG ;set pen down4200 KOALAX RTS ;continue4210 ;4220 ; --}--------------------------4230 ; Filter algorithm, initialize4240 ; ----------------------------4250 ;4260 FILTER LDA #0 } ;get zero4270 LDX #4 ;do 5 bytes4280 FILC STA SH,X ;high byte table4290 DEX ;dec count4300 B}PL FILC ;done? No.4310 STA AVG ;average low4320 STA AVG+1 ;average high4330 TAY ;xero in Y43}40 LDX #1 ;one in X4350 ;4360 ; -----------------------4370 ; Process the X-Y samples4380 ; --------------------}---4390 ;4400 LDA (PTR),Y ;get S14410 STA SL,Y ;save low byte4420 INY ;inc pointer4430 JSR MU}L4 ;process S24440 LDA (PTR),Y ;get S34450 ASL A ;times 24460 ROL SH,X ;rotate carry4470 ADC }(PTR),Y ;add = times 34480 BCC FIL2 ;overflow? No.4490 INC SH,X ;inc high byte4500 FIL2 ASL A ;times 6}4510 ROL SH,X ;rotate carry4520 STA SL,X ;save low byte4530 INX ;inc pointer4540 INY } ;inc pointer4550 JSR MUL4 ;process S44560 LDA (PTR),Y ;get S54570 STA SL,Y ;save low byte4580 ;4590 ;} -------------4600 ; Total samples4610 ; -------------4620 ;4630 LDX #4 ;add 5 elements4640 ALOOP LDA SL,X ;ge}t low byte4650 ADC AVG ;add to average4660 STA AVG ;save low byte4670 LDA SH,X ;get high byte4680 } ADC AVG+1 ;add to average4690 STA AVG+1 ;save high byte4700 DEX ;dec pointer4710 BPL ALOOP ;}done? No.4720 ;4730 ; ------------------4740 ; Divide total by 164750 ; ------------------4760 ;4770 LDX #4 ;s}hift 4 bits4780 LDA AVG ;get lo byte4790 DIV16 LSR AVG+1 ;rotate high4800 ROR A ;rotate low4810 DEX} ;dec count4820 BNE DIV16 ;done? No.4830 TAX ;save Acc4840 ;4850 ; --------------------------4}860 ; Compare average with DELTA4870 ; --------------------------4880 ;4890 LDY #4 ;5 byte table4900 MEAN SEC } ;set carry4910 SBC (PTR),Y ;compare points4920 BCS POSI ;negative? No.4930 EOR #$FF ;negate byte an}d4940 ADC #1 ;+1 = ABS value4950 POSI CMP #24 ;within DELTA?4960 BCS FAIL ;No. abort4970 TXA } ;get Acc again4980 DEY ;dec pointer4990 BPL MEAN ;done? No.5000 FAIL RTS ;exit5010 ;5020 ; }----------------5030 ; Multply Acc by 45040 ; ----------------5050 ;5060 MUL4 LDA (PTR),Y ;get S25070 ASL A ;t}imes 25080 ROL SH,X ;rotate carry5090 ASL A ;times 45100 ROL SH,X ;rotate carry5110 STA SL,X } ;save low byte5120 INX ;inc pointer5130 INY ;inc pointer5140 RTS ;return5150 ;516}0 ; ----------5170 ; Data areas5180 ; ----------5190 ;5200 BMAXS .BYTE 0,250 ;bomb limits5210 BOMPIC .BYTE 0,0,0,0,0,0,$}DC,$3E5220 .BYTE $7E,$3E,$DC,0,0,0,05230 .BYTE 0,0,$76,$F8,$FC5240 .BYTE $F8,$76,0,0,0,0,0,05250 BPSTRT .BYTE} 27,165260 BXOF .BYTE 47,425270 CURPIC .BYTE $40,$40,$A0,$A05280 .BYTE $40,$405290 P3COLR .BYTE $34,$F85300 SAUPIC .}BYTE 0,0,$18,$7E,0,05310 .BYTE $7E,$18,0,05320 SAUMID .BYTE $92,$49,$24,$925330 STARTX .BYTE 40,$FF,210,$FF5340 START}Y .BYTE $FF,20,$FF,2305350 ENDX .BYTE $FF,210,$FF,405360 ENDY .BYTE 20,$FF,230,$FF5370 ;5380 ; ---------------------5390} ; Explosion data tables5400 ; ---------------------5410 ;5420 PLOTBL .BYTE $C0,$30,$0C,$035430 ERABIT .BYTE $3F,$CF,$F3,}$FC5440 PROMSK .BYTE 0,0,0,05450 .BYTE $FF,$FF,$FF,$FF5460 .BYTE $FF,$FF,$AA,$AA5470 COORD1 .BYTE 0,1,255,0,255,1}5480 .BYTE 0,2,255,254,0,15490 .BYTE 0,254,2,1,1,2555500 .BYTE 0,2,254,255,3,05510 .BYTE 253,254,3,2,255,}2545520 .BYTE 1,255,3,253,1,253,25530 COORD2 .BYTE 0,0,1,255,0,15540 .BYTE 1,0,255,1,2,2555550 .BYTE 254,255,}1,2,254,25560 .BYTE 3,255,0,254,1,2535570 .BYTE 0,254,255,2,3,25580 .BYTE 253,253,0,1,3,255,2545590 ;5600 ; }------------------5610 ; Initial score line5620 ; ------------------5630 ;5640 SCOINI .BYTE $00,$00,$00,$005650 .BYT}E $00,$00,$00,$005660 .BYTE $6C,$76,$6C,$005670 .BYTE $00,$00,$CA,$CA5680 .BYTE $CA,$CA,$CA,$005690 ;5700 ; }------------5710 ; Level tables5720 ; ------------5730 ;5740 INIBOM .BYTE 10,15,20,25,20,255750 .BYTE 15,20,25,20,25},305760 INIBS .BYTE 12,11,10,9,8,75770 .BYTE 7,6,5,5,4,35780 INISC .BYTE 0,10,50,90,50,805790 .BYTE 40,60,100,80,}120,1255800 INIPC .BYTE $20,$30,$40,$50,$605810 .BYTE $70,$80,$A0,$B0,$C05820 .BYTE $D0,$FF5830 INIBVH .BYTE 0,0,}0,0,0,05840 .BYTE 0,0,0,$01,$01,$015850 INIBVL .BYTE $10,$20,$30,$40,$505860 .BYTE $60,$70,$80,$90,$005870 .B}YTE $10,$205880 INISV .BYTE 0,1,1,1,2,25890 .BYTE 3,3,3,4,4,45900 ;5910 ; ----------5920 ; Sound data5930 ; -------}---5940 ;5950 PLSHOT .BYTE 244,254,210,2205960 .BYTE 176,186,142,152,1085970 .BYTE 118,74,84,40,505980 ENSHOT .B}YTE 101,96,85,80,69,645990 .BYTE 53,48,37,32,21,16,5,06000 SAUSND .BYTE 10,11,12,14,16,176010 .BYTE 18,17,16,14,12},116020 ;6030 ; -----------------6040 ; Program variables6050 ; -----------------6060 ;6070 XPOS *= *+20 ;all expl. }x's6080 YPOS *= *+20 ;all expl. y's6090 CNT *= *+20 ;all expl. counts6100 BOMACT *= *+4 ;bomb active flags6110 P}ROACT *= *+8 ;proj. active flags6120 BOMBX *= *+4 ;bomb x positions6130 PROJX *= *+8 ;proj. x positions6140 BOMBY }*= *+4 ;bomb y positions6150 PROJY *= *+8 ;proj. y positions6160 BXINC *= *+4 ;bomb x vectors6170 PXINC *= *+8 } ;proj. x vectors6180 BYINC *= *+4 ;bomb y vectors6190 PYINC *= *+8 ;proj. y vectors6200 BXHOLD *= *+12 ;b/p hold a}reas6210 BYHOLD *= *+12 ;b/p hold areas6220 BOMBLR *= *+4 ;bomb left/right6230 PROJLR *= *+8 ;proj. left/right6240 B}OMBUD *= *+4 ;bomb up/down6250 PROJUD *= *+8 ;proj. up/down6260 SCOLIN *= *+20 ;score line6270 ;6280 ; -------------}-6290 ; End of program6300 ; --------------6310 ;6320 .END 0 SCOLIN *= *+20 ;score line6270 ;6280 ; -------------D=QBYT * DISK DRIVE BENCHMARKS-A6Ax"  ((TIME TO FORMA}T DISK:2(?:A6, JIFFIES<(WORST-CASE ACCESS TIME:F++(?:Au,'@ JIFFIES AVERAGEPZ* MAC}HINE LANGUAGE DATAd104,169,1,141,1,3,169n33,141,2,3,169,128,141x4,3,169,4,141,5,3169,0,133,19,133,20,32}83,228,165,20,133,212,16519,133,213,96,104,169,1141,1,3,169,82,141,23,169,128,141,4,3,1694,141,5},3,216,169,0133,212,133,213,169,7,133203,169,1,141,10,3,1690,141,11,3,32,83,228169,0,133,20,169,208,1}4110,3,169,2,141,11,332,83,228,165,20,24,101212,133,212,144,2,230,213169,0,133,20,141,11,3169,1},141,10,3,32,83228,165,20,24,101,212,133"212,144,2,230,213,198,203,16,185,96 D2:BENCH.BAS3169,1q0100 ; DRIVE BENCHMARKS0110 ; ----------------0120 ; Resident disk handler equates0130 ;0140 DUNIT = $0301 ; drive #01 }50 DCOMND = $0302 ; command register0160 DBUFLO = $0304 ; lsb of buffer addr0170 DBUFHI = $0305 ; msb of buffer addr018 }0 DAUX1 = $030A ; lsb of sector #0190 DAUX2 = $030B ; msb of sector #0200 DSKINV = $E453 ; disk handler entry addr021 }0 ;0220 READ = $52 ; READ SECTOR command0230 FORMAT = $21 ; FORMAT DISK command0240 ;0250 ORIGIN = $0600 ; start } of executable code0260 BUFFER = $0480 ; dummy buffer for sector data0270 INDEX = $CB ; loop index register0280 TICK }= $14 ; lsb of system timer0290 TOCK = $13 ; msb of system timer0300 FR0 = $D4 ; function return register0 }310 ;0320 *= ORIGIN0330 ;0340 ; TEST #10350 ; -------0360 ;0370 PLA ; # arguments; ignore0380 ;0390 } LDA #10400 STA DUNIT ; specify drive #10410 ;0420 LDA #FORMAT0430 STA DCOMND ; specify FORMAT command }0440 ;0450 LDA # BUFFER ; where our 128-byte0480 } STA DBUFHI ; dummy buffer is0490 ;0500 LDA #00510 STA TOCK0520 STA TICK ; zero system timer0530 ;054 }0 JSR DSKINV ; let OS format disk0550 LDA TICK0560 STA FR0 ; put timer reading0570 LDA TOCK ; into } BASIC's0580 STA FR0+1 ; function return register0590 RTS ; all done0600 ;0610 ; TEST #20620 ; ------- }0630 ;0640 PLA ; # arguments; ignore0650 ;0660 LDA #10670 STA DUNIT ; specify drive #10680 ;0690 } LDA #READ0700 STA DCOMND ; specify READ command0710 ;0720 LDA # BUFFER ; where our 128-byte0750 STA DBUFHI ; dummy buffer is0760 ;0770 CLD ; for } safety0780 LDA #00790 STA FR00800 STA FR0+1 ; zero sum0810 LDA #70820 STA INDEX ; init index08 }30 ;0840 BACK0850 LDA #10860 STA DAUX10870 LDA #00880 STA DAUX2 ; point to sector 10890 ;0900 JS }R DSKINV ; and fetch it0910 ;0920 LDA #00930 STA TICK ; zero timer0940 ;0950 LDA # <7200960 STA DAU }X10970 LDA # >720 ; now point to0980 STA DAUX2 ; sector 7200990 ;1000 JSR DSKINV ; and fetch that1010 ; }1020 LDA TICK ; get reading1030 CLC 1040 ADC FR0 ; add to previous1050 STA FR0 ; readings1060 } BCC FORTH1070 INC FR0+11080 ;1090 FORTH1100 ;1110 LDA #01120 STA TICK ; zero timer1130 ;1140 S }TA DAUX21150 LDA #11160 STA DAUX1 ; point to sector 11170 ;1180 JSR DSKINV ; fetch it1190 ;1200 LDA }TICK ; get new time1210 CLC ; add to previous1220 ADC FR0 ; readings1230 STA FR01240 BCC N }EXT1250 INC FR0+11260 ;1270 NEXT1280 DEC INDEX ; loop 8 times1290 BPL BACK1300 RTS ; and retu }rn to BASIC1310 ;1320 .END NEXT1280 DEC INDEX ; loop 8 times1290 BPL BACK1300 RTS ; and retu "BJDOS SYSBNDEFENSE3ASMBBENCH BASBBENCH ASM